'use strict';//es5的严格模式
// 包装函数
module.exports = function(grunt){
	// 任务配置，所有插件的配置信息
	//或者引用load-grunt-tasks组建
	// require('load-grunt-tasks')(grunt);
	// require('time-grunt')(grunt);


	// var config = {
	// 	app: 'app',
	// 	dist: 'dist'
	// }
	grunt.initConfig({
		// 获取package.json的信息
		pkg: grunt.file.readJSON('package.json'),
		
		// jshint插件配置信息(检查javascript语法错误插件)
		//配置copy命令
		// copy: {
		// 	// dist_html: {
		// 	// 	src:'<%= pkg.app %>/index.html',//源文件
		// 	// 	dest:'<%= pkg.dist %>/index.html'//目标文件
		// 	// },dist_js: {
		// 	// 	src:'<%= pkg.app %>/js/index.js',//源文件
		// 	// 	dest:'<%= pkg.dist %>/js/index.js'//目标文件
		// 	// }
		// 	// 配置额外参数
		// 	files: [
		// 		expand: true,
		// 		cwd:'<%= pkg.app %>/',//相对于src的询问路径
		// 		src:'*.html',
		// 		dest: '<%= pkg.dist%>/',
		// 		ext: 'min.html',//是否修改文件后缀名
		// 		extDot:'first',//从哪个地方开始修改文件后缀
		// 		flatten: false,//展开平铺[直接放在根目录]
		// 		rename: function(dest, src){//[在faltten设为true时rename可以为fkatten做过滤]
		// 			return dest + 'js/' +src
		// 		}
		// 	]
		// } 
		//配置目录清除目录
		// clean: {
		// 	dist: {
		// 		// src: ['<%= pkg.dist %>/index.html','<%= pkg.dist %>/js/index.js']
		// 		//或者 删除所有
		// 		src: ['<%= pkg.dist %>/**/*']
		// 		// 额外参数
		// 		filter: function(){//过滤删除
		// 			return (!grunt.file.isDir(filepath))
		// 		},
		// 		expand: true //处理动态的src到dest的文件映射
		// 	}
		// }
		jshint: {
			/*
			 * build描述需要检查哪些js文档
			 */
			build: ['Gruntfile.js','src/*.js'],
			/*
			 * options描述通过怎样的规则检查 规则描述文件保存在目录下的'.jshint'文件中
			 */
			options: {
				jshintrc: '.jshintrc'
			}
		},
		//csslint插件配置信息(检查css语法错误 与jshint配置方式一致)
		// csslint: {
		// 	/*
		// 	 * build描述需要检查哪些css文档
		// 	 */
		// 	build: ['Gruntfile.js', 'src/*.js'],
			
		// 	 * options描述通过怎样的规则检查 规则描述文件保存在目录下的'.csslintrc'文件中
			 
		// 	options: {
		// 		jshint: '.csslintrc'
		// 	}
		// }
		// uglifyc js压缩插件配置信息
		uglify: {
			/*
			 * options规定生成的压缩文件带banner,
			 * banner 格式 <%被压缩的文件压缩的文件%> <%压缩的日期%>
			 */
			options: {
				stripBanners: true,
				banner: '/*!<%=pkg.name%>-<%=pkg.version%>.js <%= grunt.template.today("yyy-mm-dd")%> */\n'
			},
			/*
			 * build 配置源文件和目标文件
			 * src 源文件
			 * dest目标文件  目标文件目录/压缩之后命名
			 */
			build: {
				src: 'src/test.js',
				dest: 'build/<%=pkg.name%>-<%=pkg.version%>.js.min.js'
			}
			/*还有其他配置 可在grunt官网查看*/
		},
		//watch插件配置信息(真是实现自动化)
		watch: {
			build:{
				files: ['src/*.js','src/*.css'],
				tasks: ['jshint','uglify'],
				options: {spawn: false}
			}
		},
		open: {
		    dev : {
		      path: 'app/index.html',
		      // app: 'Google Chrome'
		    },
		    build : {
		      path : 'http://google.com/',
		      // app: 'Firefox'
		    },
		    // file : {
		    //   path : '/etc/hosts'
		    // },
		    custom: {
		      path : function () {
		        return grunt.option('path');
		      } 
		    }
		  }
		 
	});
	// 告诉grunt我们将使用插件
	grunt.loadNpmTasks('grunt-contrib-jshint');
	grunt.loadNpmTasks('grunt-contrib-uglify');
	grunt.loadNpmTasks('grunt-contrib-watch');
	grunt.loadNpmTasks('grunt-open');
	// 告诉grunt当我们在终端中输入grunt是需要做些什么(注意先后顺序)
	grunt.registerTask('default',['jshint','uglify','open:dev','watch']);
};